package Day_0225.SpringAOP;

/**
 * @author zxc
 * @date 2023/02/25 11:47
 **/
public class SpringAOP_nouns {
    public static void main(String[] args) {
        /**
         * 解释Spring AOP中的名词
         * ===》
         * 1.切面（Aspect）：
         * （1）切面是通知和切点的结合。通知和切点共同定义了切面的全部内容。
         * （2）在SpringAOP中，切面可以使用通用类（基于模式的风格） 或者在普通类中以 @AspectJ 注解来实现。
         *
         * 2.连接点（Join point）：
         * （1）指方法，在Spring AOP中，一个连接点 总是 代表一个方法的执行。
         * （2）应用可能有数以千计的时机，应用通知。这些时机被称为连接点。
         * （3）连接点是，在应用执行过程中能够插入切面的一个点。
         * （4）这个点可以是调用方法时、抛出异常时、甚至修改一个字段时。切面代码可以利用这些点插入到应用的正常流程之中，并添加新的行为。
         *
         * 3.通知（Advice）：
         * 在AOP术语中，切面的工作被称为通知。
         *
         * 4.切入点（Pointcut）：
         * （1）切点的定义，会匹配通知所要织入的一个或多个连接点。
         * （2）通常使用明确的类和方法名称，或是利用正则表达式定义所匹配的类和方法名称来指定这些切点。
         *
         * 5.引入（Introduction）：
         * 引入允许我们向现有类添加新方法或属性。
         *
         * 6.目标对象（Target Object）：
         * （1）被一个或者多个切面（aspect）所通知（advise）的对象。
         * （2）它通常是一个代理对象。也有人把它叫做 被通知（adviced） 对象。
         * （3）Spring AOP是通过运行时代理实现的，这个对象永远是一个 被代理（proxied） 对象。
         *
         * 7.织入（Weaving）：
         * ===》
         * （1）织入，是把切面应用到目标对象并创建新的代理对象的过程。
         * （2）在目标对象的生命周期里有多少个点可以进行织入：
         *
         * 织入的时机 ：
         * （1）编译期：
         *  切面在目标类编译时被织入。AspectJ的织入编译器是以这种方式织入切面的。
         *
         * （2）类加载期：
         *  切面在目标类加载到JVM时被织入。
         *  需要特殊的类加载器，它可以在目标类被引入应用之前增强该目标类的字节码。
         *  AspectJ5的加载时织入就支持以这种方式织入切面。
         *
         * （3）运行期：
         *  切面在应用运行的某个时刻被织入。
         *  一般情况下，在织入切面时，AOP容器会为目标对象动态地创建一个代理对象。SpringAOP就是以这种方式织入切面。
         *
         */
    }
}
